#!/bin/bash
source ./common.sh

# 功能说明
echo    "功能说明：基于使用分支，创建新分支"
echo "1. 如果远程仓库已经存在要创建的指定新分支，不再创建。因为分支删除操作影响很大，如果远程仓库已经存在，需要手动确认是否删除存在的新分支"
echo "2. 如果远程仓库不存在要创建的指定新分支，但是本地存在新分支，那么会删除本地存在的新分支，然后重新创建"
# 打印空行
echo -e '\n\n'

# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

module_array=(${module_name_list})

# 根据配置信息生成gitlab的源代码克隆地址
module_name_list_size=${#module_array[*]}
echo -e "Hello，您本次操作了"${module_name_list_size}"个服务\n"

int=0
while(( $int < ${module_name_list_size}))
do    
    # 创建当前git项目的父级临时目录tmp，存放项目信息
    module_name=${module_array[$int]}
    module_folder_name=${MODULE_ID}-${module_name}

    code_url=http://${SOURCE_CODE_SERVER}/${GITLAB_GROUP_NAME}/${module_folder_name}.git
    echo "开始生成第"$(expr ${int} + 1)"个，服务名：${module_array[$int]}, 源代码地址："${code_url}
    let "int++"


    # 根据固定规则生成代码分支名称,分支名称后缀branch 
    echo "根据固定规则构造代码分支名称：项目名称-服务名称-分支名称"
    use_branch_name=${MODULE_ID}"-"${module_name}-${USE_BRANCH_VERSION}
    new_branch_name=${MODULE_ID}"-"${module_name}-${NEW_BRANCH_VERSION}


    #  开始管理分支
    # git文件夹是否存在
    dirPath="${PROJECT_PATH}/project/${module_folder_name}"
    echo ${dirPath}

    if [ -d ${dirPath} ]
    then
        echo "${module_folder_name}目录存在，校验通过"
    else
        echo ${module_folder_name}"目录不存在，即将克隆代码并创建目录"
        # 将克隆的代码统一放到一个目录下
        cd $PROJECT_PATH/project
        git clone ${code_url}
        # 目录第二次校验，避免git地址错误造成创建临时文件夹
        if [ -d ${dirPath} ]
        then
            echo "目录第二次校验，${module_folder_name}目录存在，校验通过"
        else
            echo ${module_folder_name}"目录不存在，跳出循环！！！"
            # 打印空行，分割模块
            echo -e '----------------------------------------------------------------------------------------------------------------------------------------\n'
            continue
        fi
    fi
    
    echo "进入模块目录： "${dirPath}
    cd ${dirPath}

    # 创建临时文件夹，存放项目信息
    module_tmp_dir="../tmp/${module_name}"
    mkdir -p ${module_tmp_dir}

    # 克隆代码后，到远程仓库中拉取所有你本地仓库中还没有的数据
    git fetch
    
    # 基于当前使用分支，开始创建新分支............
    # 根据当前标记的标签版本号，反推出上一次的标签号
    echo -e "创建新分支"${new_branch_name}" 开始\n"

    #创建临时文件，存放分支名称
    branch_exist_validate="branch_exist_validate.tmp"

#---------------------------------------------------------------使用分支校验 开始---------------------------------------------------------------------------
    echo "使用分支校验................."
    if [[ ! ${USE_BRANCH_VERSION} = "master" ]]
    then
        branchExistValidate ${use_branch_name} ${module_tmp_dir}
        branch_validate_result=$?
    else
        use_branch_name="master"
        branch_validate_result=0
        echo "使用分支为：master,跳过分支校验"
    fi
    

    if [[ ! ${branch_validate_result} = 0 ]]; then
        echo "      使用分支：${use_branch_name}不存在，请切换使用分支！！！"
        # 打印空行，分割模块
        echo -e '----------------------------------------------------------------------------------------------------------------------------------------\n'
        continue
    fi
#================================================================使用分支校验 结束===========================================================================
  

#---------------------------------------------------------------新分支校验 开始---------------------------------------------------------------------------  
    # 新分支校验
    echo "新分支校验................."
    branchExistValidate ${new_branch_name} ${module_tmp_dir}
    branch_validate_result=$?


    echo "获取远程分支名称： "${branch_read_name}
    
    if [ ${branch_validate_result} = 0 ]; then
        branch_is_exist="是"
        echo "获取新分支名称${branch_read_name},是否存在： "${branch_is_exist}
        echo "新的分支${branch_read_name}已经存在，不再创建，跳出循环！！！"
        # 打印空行，分割模块
        echo -e '----------------------------------------------------------------------------------------------------------------------------------------\n'
        continue
    else
        branch_is_exist="否"
        echo "获取新分支名称：${branch_read_name},是否存在： "${branch_is_exist}
        echo "执行git co -b ${branch_read_name}命令,基于使用分支：  ${use_branch_name}，创建新分支:    ${new_branch_name}" 
        # 如果本机存在新分支，删除新分支，重新创建
        #git br -d ${new_branch_name}
        # 创建新分支
        git co -b ${new_branch_name}
        # 推送新的分支到拥有写权限的远程仓库
        git push origin ${new_branch_name}
    fi  
#================================================================新分支校验 结束===========================================================================

    echo "      创建分支成功"${new_branch_name}
    # 打印分支名称列表
    echo -e "\n本地分支列表"
    git br --list

    # 自动抓取使用分支数据下来，然后将远端分支自动合并到本地仓库中当前分支
    echo "抓取使用分支数据下来，然后将远端分支自动合并到本地仓库中使用分支"
    git pull origin  ${new_branch_name}


    echo -e "\n创建新分支"${new_branch_name}" 结束" 

    # 打印空行，分割模块
    echo -e '----------------------------------------------------------------------------------------------------------------------------------------\n'
done    